package com.farmlei.zkt_c3100.lock;

import com.farmlei.zkt_c3100.common.PropertiesUtils;
import com.sun.jna.*;
import com.sun.jna.ptr.IntByReference;

/**
 * PULLSDK对应的java端工具类
 */
public interface PullLibrary extends Library {
    String DLL_PATH =  PropertiesUtils.getConfig().getString("lockDllPath", "C:\\PullSDK\\x64\\plcommpro.dll");

    PullLibrary Instance = Native.loadLibrary((Platform.isWindows() ? DLL_PATH : "c"),
            PullLibrary.class);

    /**
     * 连接控制器
     * @param format 连接字符串
     * @return 连接成功的句柄
     */
    Pointer Connect(String format);

    /**
     * 连接控制器，并提供错误码
     * @param format 连接字符串
     * @param pErrorCode 连接失败后的错误码
     * @return 连接成功的句柄
     */
    Pointer ConnectExt(String format, IntByReference pErrorCode);

    /**
     * 断开连接
     * @param pointer 连接成功的句柄
     */
    void Disconnect(Pointer pointer);

    /**
     * 获取控制器配置参数
     * @param pointer 连接成功的句柄
     * @param buffer 返回结果字节数据
     * @param bufferSize 返回数据的缓存长度
     * @param items 要查询的配置项目
     * @return
     */
    Pointer GetDeviceParam(Pointer pointer, byte[] buffer, IntByReference bufferSize, String items);

    /**
     * 获取
     * @param pointer 连接成功的句柄
     * @param buffer 见PULLSDK说明
     * @param bufferSize 见PULLSDK说明
     * @param tableName 见PULLSDK说明
     * @param fieldNames 见PULLSDK说明
     * @param filter 见PULLSDK说明
     * @param options 见PULLSDK说明
     * @return
     */
    Pointer GetDeviceData(Pointer pointer, byte[] buffer, IntByReference bufferSize, String tableName, String fieldNames, String filter, String options);

    /**
     * 控制门禁管理器
     * @param pointer 连接成功的句柄
     * @param operationID 操作内容： 1 表示锁输出或者辅助输出， 2 表示取消报警， 3 重启设备,4 启用和禁用常开（这里的禁用常开包括首开常开、连续五次卡启用的常开、远程启用的常开）。
     * @param param1 见PULLSDK说明
     * @param param2 见PULLSDK说明
     * @param param3 见PULLSDK说明
     * @param param4 见PULLSDK说明
     * @param options 见PULLSDK说明
     * @return
     */
    IntByReference ControlDevice(Pointer pointer, NativeLong operationID, NativeLong param1, NativeLong param2, NativeLong param3, NativeLong param4, String options);
}